package com.hdfs.file;

import java.util.Arrays;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.BlockLocation;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Test;

public class TestDemo {

	@Test
	public void test1() throws Exception{
		//获取HDFS某个目录的信息
		
		//配置NameNode：HDFS的主节点
		Configuration conf = new Configuration();
		conf.set("fs.defaultFS", "hdfs://192.168.157.111:9000");
		
		//得到HDFS的客户端
		FileSystem fs = FileSystem.get(conf);
		
		//得到/tools目录的信息
		FileStatus[] list =  fs.listStatus(new Path("/tools"));
		for(FileStatus status:list){
			//获取文件的属性
			System.out.println(status.isDirectory()?"目录":"文件");
			System.out.println(status.getAccessTime());
		}
	}
	
	@Test
	public void test2() throws Exception{
		//获取某个文件的数据块的信息
		
		//配置NameNode：HDFS的主节点
		Configuration conf = new Configuration();
		conf.set("fs.defaultFS", "hdfs://192.168.157.111:9000");
		
		//得到HDFS的客户端
		FileSystem fs = FileSystem.get(conf);
		
		//获取/tools/hadoop-2.7.3.tar.gz的数据块的信息
		
		//得到该文件的状态信息
		FileStatus fileStatus = fs.getFileStatus(new Path("/tools/hadoop-2.7.3.tar.gz"));
		
		//继续获取数据块的信息
		BlockLocation[] list =  fs.getFileBlockLocations(fileStatus, 0, fileStatus.getLen());
		for(BlockLocation bl:list){
			//获取数据块的主机信息
			System.out.println(Arrays.toString(bl.getHosts()));
			
			//获取数据块的名称
			System.out.println(Arrays.toString(bl.getNames()));
		}
	}
}
